
package coop.bancocredicoop.proyectos.gd;

import coop.bancocredicoop.proyectos.gd.Usuario;
import com.entrepids.psec.security.client.services.UserContext;
import com.entrepids.psec.security.client.services.UserContextManager;

class RBAC {

    static def GD_RBAC_PERMISO = [
		"GD2_CARGA": [opcion: "GdocGrupoDocII", accion: "INGR", grupoAlfresco: 'CARGAR_DOCUMENTO'],
		"GD2_MODIFICACION": [opcion: "GdocGrupoDocII", accion: "MODI", grupoAlfresco: 'CARGAR_DOCUMENTO'],
		"GD2_CONSULTA": [opcion: "GdocGrupoDocII", accion: "CONS", grupoAlfresco: 'CONSULTAR_DOCUMENTO'],
		"GD2_ELIMINACION": [opcion: "GdocGrupoDocII", accion: "ELI", grupoAlfresco: 'CARGAR_DOCUMENTO'],
		"GD2_PARAMETRIZACION": [opcion: "GdocGrupoDocIIAdm", accion: "ACT", grupoAlfresco: '']
    ]

    def userName
	def userContext

    RBAC(session, userName) {
        this.userName = userName
		this.userContext = UserContextManager.getInstance().getUserContext(userName, "GDOC")
    }

    def getUsuario() {
		new Usuario(userName, userContext.getUserTO().getDsFirstName(), userContext.getUserTO().getDsLastName())
    }

    def tienePermiso(casoDeUso) {
        def accion_rbac = GD_RBAC_PERMISO[casoDeUso]
		userContext.canPerform(accion_rbac.opcion, accion_rbac.accion)
    }

    def rolesAlfrescoHabilitados() {
		def permisos = GD_RBAC_PERMISO.findAll { k, v ->
				tienePermiso(k) }

		permisos.collect {
				it.value.grupoAlfresco }.unique().findAll {
				it }
    }

	def rolesAlfrescoDeshabilitados() {
		def rolesAlfresco = GD_RBAC_PERMISO.collect {
				it.value.grupoAlfresco }.unique().findAll {
				it }

		rolesAlfresco - rolesAlfrescoHabilitados()
	}

}
